2017华为面试算法题小结

9月份去参加华为面试,问了项目经验后,直接让写程序,问了两道题目1.完成strcpy函数 2.实现大数相加 都是基本题,但还是有比较做个总结

1. 关于strcpy的实现(10分):

【4分代码】

void strcpy(char *strDest,char *strSrc)
{
	while((*strDest++ = *strSrc++) != '\0');
}
【6分代码】

void strcpy(char *strDest,const char *strSrc)
{
	while((*strDest++ = *strSrc++) != '\0');
}

【8分代码】

void strcpy(char *strDest,const char *strSrc)

{
	assert((strDest!=NULL) && (strSrc!=NULL))
	while((*strDest++ = *strSrc++) != '\0');
}


 [10分代码] 

char* strcpy(char *strDest,const char *strSrc)
{
	char *r = strDest;
	assert((strDest!=NULL) && (strSrc!=NULL))
	while((*strDest++ = *strSrc++) != '\0');
	return r;
}

2.关于大数相加的实现代码如下:

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;

string & remove_zero(string &a)
{
	if (a[0] != '0')
		return a;
	int i = 0;
	while (i<a.length() && a[i]=='0')
	{
		i++;
	}
	a = a.substr(i, a.length() - 1);
	return a;
}
int main()
{
	string a;
	string b;
	cin >> a >> b;
	//去掉前导零
	string add1 = remove_zero(a);
	string add2 = remove_zero(b);

	//反转
	reverse(add1.begin(),add1.end());
	reverse(add2.begin(), add2.end());
	//相加
	int len1 = add1.length();
	int len2 = add2.length();

	int len = len1;
	if (len1 < len2)
	{
		len = len2;
	}
	int carry = 0;
	string res = "";
	char cur;
	int i;
	for ( i = 0; i < len;i++)
	{
		int temp1 = 0;
		int temp2 = 0;
		if (i<len1)
			temp1 = add1[i] - '0';
		if (i<len2)
			temp2 = add2[i] - '0';
		int sum = temp1+ temp2 + carry;
		if (sum>9)
		{
			carry = 1; 
			cur = '0' + sum - 10;
		}
		else
		{
			carry = 0;
			cur = '0' + sum;
		}
		res = res + cur;
	}
	//最后一位有进位
	if (carry==1)
	{
		res += '1';
	}
	reverse(res.begin(), res.end());
	cout << res << endl;

	system("pause");
	return 0;
}
运行结果如下:




  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
专业面试我的技巧和经验: 一、 巧妇难为无米之炊,事前做一些功课是必须的,把自己学习过的和应聘岗位相关的内容复习下,比如性能与算法岗位:本科电子信息工程和通信工程这些课程肯定学过,通信原理,信息论和编码,信号与系统,数字信号处理,复习一下掌握大概的轮廓一个星期应该差不多可以搞定. 二、 善于引导面试官,比如当面试官问到什么问不懂的时候,避免连问几个都不懂,可以尝试这么说:我***方面的知识比较匮乏,不是很了解,但是我对***的知识还是比较熟习,我觉得***的知识在我们华为性能与算法工程师必须要掌握的吧。以我面试为例,面试问我3G和4G的关键技术,已经这些关键技术的基本原理,我是做雷达信号处理的,确实不懂。我就和面试官说:对不起,因为研究生期间主要做的雷达信号处理的工作,我对移动通信的知识了解甚少,但是我对移动通信的基础只是比如通信原理和调制解调技术还有一定的了解(当然这都是我事先复习好的),我觉得无论什么类型的通信技术都离不开这些基本的理论。接着面试官就让我说信源编码和信道编码的作用已经他们通常采用的方法,当然我也就能对答如流了。所以,引导很重要。 三、 专业面试对自己简历上不要为了蒙骗面试官,写的项目自己捡不熟悉,对简历上的东西一问三不知,语言表达不清楚,说不半天不能告诉面试官你做的工作内容和意义,这个很不好。 群面 一般10-14个人,看当天应聘的人数而定,分2组,一个话,让排序之类的,或者辩论之类的,不同的组会抽到不同的问,不同的地方也会有不同的问,在这里把问说出来没什么意义,这一轮会有很多意想不到的情况,比如这组我本来不是选为组长,但是在做总结的时候面试官让我做总结,或者突然问你刚才某某同学说的话你同意吗,或者突然说你今天脸色好像不好看之类的,所以灵机应变才是王道。群面一般要自我介绍,自我介绍要简短,不要说太多,我建议按以下几个方面说,自己学校专业、来自哪里、然后说自己学习,主要稍微说下自己的项目,说下名字就OK了,然后说自己做项目获得成果,比如发表文章,专利和之类的。然后说自己优点和缺点,一般情况下优点缺点都要说,而且我觉得最好优点缺点自己多准备几个,免得到时候你要说的前面的人都说了,就像我们这组:我开始说缺点的时候说我性格比较急,做什么事情都想快点做完,午觉也不睡,但是经常适得其反,中午不谁觉,下午就工作效率低。后面好几个同学说的时候都这么说了,惹的面试官说,你们重复一个东西说。说缺点的时候大家要慎重,不要说和自己工作相关的缺点,比如我们那个组一个同学说:我的缺点就是比较随性,重要场合经常穿拖鞋为此挨了不少批评。 面试官:。。。。(前面省略了一些),你这种随行的行为有同学提醒过你吗?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵卓不凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值